#include <iostream>
#include <vector>

//给出一个数组，找出其中的三个数，使得这三个数的和为0，找出每一组不重不漏
//最外层循环是一个标准，后面转化成在其余部分找两个和为这个数的负数的题型

void search(std::vector<int>& v, int target, int left)
{
    int right = v.size() - 1;
    while(left < right)
    {
        if(v[left] + v[right] == target)
        {
            break;
        }
        else if(v[left] + v[right] < target)
        {
            left++;
        }
        else if(v[left] + v[right] > target)
        {
            right--;
        }
    }

    if(left == right)
    {
        return;
    }

    std::cout <<  -target << " " << v[left] << " "  << v[right] << std::endl;
}

int main()
{
    std::vector<int> v = {2, 4, 9, 7, 5, -2, -3, -5, 1};
    std::sort(v.begin(), v.end());
    for(auto& e : v)
    {
        std::cout << e << " ";
    }
    std::cout << std::endl;
    for(int i = 0; i < v.size() - 2; i++)
    {
        search(v, 0 - v[i], i + 1);
    }

    return 0;
}